#coding:utf-8
import pandas as pd
from pyecharts.charts import Bar
from pyecharts.charts import Pie
from pyecharts import options as opts
# 读取数据
df = pd.read_csv('房源信息.csv')
# 数据处理
#删除DataFrame中所有包含缺失值（NaN）的行。
df = df.dropna()
#删除重复的房源信息
df = df.drop_duplicates()
# 根据业务需求功能需求进行数据分析
def getzoomBar(data):
    # 面积信息的条形图数据
    year_name = data['面积'].value_counts().sort_index()
    # 户型信息的条形图数据
    year_hu = (data['价格']).value_counts().sort_index()
    # 创建户型的饼图
    pie = Pie()
    # 添加数据到饼图中，数据来源于'户型'列的计数结果，将其转换成列表形式，
    pie.add("", data['户型'].value_counts().reset_index(name='数量').values.tolist(),
            # radius指定饼图内外半径，center指定饼图中心位置，确保饼图居中显示
            radius=["40%", "75%"], center=["70%", "50%"])

    # 设置饼图的全局配置项
    pie.set_global_opts(
        # 设置标题配置项
        title_opts=opts.TitleOpts(
            # 设置主标题
            title="房源户型信息",
            # 设置副标题
            subtitle="去安居客找房",
            # 设置副标题的跳转链接
            subtitle_link='https://gy.zu.anjuke.com/fangyuan/p2/?kw=',
            # 设置标题的水平位置为右侧
            pos_left="right",
            # 设置标题距离顶部的位置，避免与图例重合
            pos_top="10%"
        ),
        # 设置图例配置项
        legend_opts=opts.LegendOpts(is_show=True, pos_top="1%")  # 设置图例位置稍微高于标题
    )

    # 设置饼图的系列标签样式，格式化标签为：标签名: 值
    pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    # 创建一个柱状图对象
    bar_name = (
        Bar()  # 实例化柱状图对象
            .add_xaxis(list(year_name.index))  # 添加x轴数据，这里的year_name是一个pandas Series对象，其index作为x轴标签
            .add_yaxis('房源面积信息', year_name.values.tolist())  # 添加y轴数据和对应的系列名，数据来源于year_name的值
            .set_global_opts(  # 设置全局配置项
            title_opts=opts.TitleOpts(  # 设置标题配置项
                subtitle="去安居客找房",  # 设置副标题
                subtitle_link='https://gy.zu.anjuke.com/fangyuan/p2/?kw=',  # 设置副标题链接，注意这里实际在柱状图中副标题可能不支持链接
                pos_left="center"  # 标题位置设置为居中
            ),
            datazoom_opts=opts.DataZoomOpts(is_show=True),  # 设置数据区域缩放组件，并显示它
            legend_opts=opts.LegendOpts(is_show=True, pos_left='30%'),  # 设置图例，并显示它，图例位置设置为左侧30%的位置
            toolbox_opts=opts.ToolboxOpts(is_show=True),  # 设置工具箱组件，并显示它
            visualmap_opts=opts.VisualMapOpts(is_show=True)  # 设置视觉映射配置项，用于颜色映射，并显示它
        )
    )
    # 创建一个条形图对象
    bar_price = (
        Bar()#创建一个条形图对象
    # 添加x轴数据，将DataFrame的index转换为列表
            .add_xaxis(list(year_hu.index))
            # 添加y轴数据，将DataFrame的values转换为列表
            .add_yaxis('房源价格信息', year_hu.values.tolist())
            # 设置全局配置项
            .set_global_opts(
            # 设置图表标题
            title_opts=opts.TitleOpts(
                subtitle="去安居客找房",
                subtitle_link='https://gy.zu.anjuke.com/fangyuan/p2/?kw=',
                pos_left="center"
            ),
            # 设置数据区域缩放组件，允许用户通过鼠标滚轮或滑动条缩放视图
            datazoom_opts=opts.DataZoomOpts(is_show=True),
            # 设置图例组件，显示图例
            legend_opts=opts.LegendOpts(is_show=True,pos_left='30%'),
            # 设置工具箱组件，显示工具箱
            toolbox_opts=opts.ToolboxOpts(is_show=True),
            # 设置视觉映射组件，常用于将数据的映射到视觉元素上，如颜色
            visualmap_opts=opts.VisualMapOpts(is_show=True),
            # opts.TitleOpts=(title="房源价格",subtitle="面积信息")
        )
    )
    # 渲染价格信息的条形图到HTML文件
    bar_price.render('房源价格信息条形图.html')
    # 创建面积信息的条形图
    bar_name.render('房源面积信息条形图.html')
    # 创建户型信息的条形图
    pie.render("房源户型信息饼图.html")
getzoomBar(df)  #传数据源
